package com.ld.poetry.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;

import java.io.Serializable;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 系统参数配置实体类
 * 
 * 功能说明：
 * 1. 用于存储系统配置参数
 * 2. 支持配置参数的分类管理
 * 3. 提供配置参数的访问控制
 * 
 * 使用场景：
 * 1. 系统参数配置管理
 * 2. 动态配置参数更新
 * 3. 配置参数查询
 * 
 * 注意事项：
 * 1. 配置参数需要合理分类
 * 2. 敏感配置需要加密存储
 * 3. 配置变更需要及时通知
 * 4. 重要配置需要备份
 * 
 * @author sara
 * @since 2024-03-23
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sys_config")
public class SysConfig implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 配置ID
     * 
     * 功能说明：
     * 1. 唯一标识配置记录
     * 2. 自增主键
     * 
     * 数据库字段：
     * - 字段名：id
     * - 类型：INT
     * - 约束：主键，自增
     * 
     * 使用场景：
     * 1. 配置记录的唯一标识
     * 2. 配置记录的关联查询
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 配置名称
     * 
     * 功能说明：
     * 1. 配置的显示名称
     * 2. 用于界面展示
     * 
     * 数据库字段：
     * - 字段名：config_name
     * - 类型：VARCHAR
     * - 约束：可空
     * 
     * 使用场景：
     * 1. 配置管理界面显示
     * 2. 配置参数说明
     */
    @TableField("config_name")
    private String configName;

    /**
     * 配置键名
     * 
     * 功能说明：
     * 1. 配置的唯一标识符
     * 2. 用于程序访问配置
     * 
     * 数据库字段：
     * - 字段名：config_key
     * - 类型：VARCHAR
     * - 约束：唯一索引
     * 
     * 使用场景：
     * 1. 程序获取配置值
     * 2. 配置参数查询
     */
    @TableField("config_key")
    private String configKey;

    /**
     * 配置键值
     * 
     * 功能说明：
     * 1. 配置的具体值
     * 2. 支持多种数据类型
     * 
     * 数据库字段：
     * - 字段名：config_value
     * - 类型：TEXT
     * - 约束：可空
     * 
     * 使用场景：
     * 1. 存储配置参数值
     * 2. 动态更新配置
     */
    @TableField("config_value")
    private String configValue;

    /**
     * 配置类型
     * 
     * 功能说明：
     * 1. 标识配置的访问权限
     * 2. 1表示私用，2表示公开
     * 
     * 数据库字段：
     * - 字段名：config_type
     * - 类型：VARCHAR
     * - 约束：非空
     * 
     * 使用场景：
     * 1. 控制配置访问权限
     * 2. 配置参数分类
     */
    @TableField("config_type")
    private String configType;
}
